rxJava 是一個開源涵式庫,用於有關資料的線程轉換,非常強大,相當有技術深度的好用工具,學的好可以大大優化自己的程式碼。
分為觀察者與被觀察者,當被觀察者發出新資料時,Observer就會接收資料到並做出對應的操作。
//rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
// Android main thread
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//Observable發送資料,並與Observer訂閱
Observable.just(1,2,3).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d("Just", "與Observable訂閱時: ");
}
@Override
public void onNext(@NonNull Integer integer) {
Log.d("Just", "接收到值為: "+integer);
}
@Override
public void onError(@NonNull Throwable e) {
Log.d("Just", "接收值時發生錯誤時: "+e.getMessage());
}
@Override
public void onComplete() {
Log.d("Just", "Observer發送完值時");
}
});
private Observable getCreateObservable(){
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
//對觀察者onNext()發出訊息
emitter.onNext("Hello");
emitter.onNext("World!!");
//對觀察者發出onComplete(),表示完成
emitter.onComplete();
}
});
}
getCreateObservable().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("Create", "與Observable訂閱時: ");
}
@Override
public void onNext(@NonNull String s) {
Log.e("Create", "onNext: "+s );
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("Create", "接收值時發生錯誤時: "+e.getMessage());
}
@Override
public void onComplete() {
Log.e("Create", "Observable發送完值時");
}
});
這裡我新增了observeOn()subscribeOn(),分別代表: